package state_pattern.concrete;

import state_pattern.Role;
import state_pattern.State;

/**
 * @author 申书航
 * @version 1.0
 * 攻击状态类，表示角色处于攻击状态时的行为和状态转移
 */
public class AttackState extends State {

    private Role target;

    /**
     * 构造函数，初始化攻击状态的角色和目标
     * @param role 执行攻击的角色
     * @param target 被攻击的目标角色
     */
    public AttackState(Role role, Role target) {
        super(role);
        this.target = target;
    }

    @Override
    /**
     * 进入攻击状态时调用的方法
     * 打印角色进入攻击状态的信息
     */
    public void onEnter() {
        System.out.println(role.getName() + "进入攻击状态");
    }

    @Override
    /**
     * 执行攻击行为，进行状态转移
     * 打印攻击信息，并切换角色和目标的状态
     */
    public void execute() {
        System.out.println(role.getName() + "攻击了" + target.getName());
        // 切换到站立状态
        role.changeState(new StandState(role));
        // 目标切换至受伤状态
        target.setState(new HurtState(target, role));
    }
}
